<?php
require_once(Config::acquire("Controller", null, "controller"));
require_once(Config::acquire("Probleem", MODEL));
require_once(Config::acquire("Gebruiker", MODEL));
require_once(Config::acquire('Medewerker', MODEL));
require_once(Config::acquire('Sla', MODEL));
require_once(Config::acquire('Hardware', MODEL));
require_once(Config::acquire('ProbleemIncident', MODEL));
/**
 * Created by JetBrains PhpStorm.
 * User: Sander
 * Date: 29-6-11
 * Time: 18:45
 * To change this template use File | Settings | File Templates.
 */

class Probleem extends Model
{

    private $id;
    private $omschrijving;
    private $afgehandeld;
    private $gebruiker;
    private $medewerker;
    private $sla;
    private $hardware;
    private $tijd;
    private $tijdafgerond;


    public function __construct($id, $omschrijving, $afgehandeld, Medewerker $medewerker, $tijd, $tijdafgerond)
    {
        $this->id = $id;
        $this->omschrijving = $omschrijving;
        $this->afgehandeld = $afgehandeld;
        $this->medewerker = $medewerker;
        $this->tijd = $tijd;
        $this->tijdafgerond = $tijdafgerond;

    }

    public function delete()
    {
        // TODO: Implement delete() method.
    }

    public static function read($id)
    {
        $probleem = SQL::query("SELECT * FROM `probleem` where Probleem_ID = $id");

        if ($probleem->isValid()) {
            return Probleem::create(
                $probleem->fetchField('Probleem_ID'),
                $probleem->fetchField('Probleem_Omschrijving'),
                $probleem->fetchField('Afgehandeld'),
                Medewerker::read($probleem->fetchField('Medewerker_ID')),
                $probleem->fetchField('Tijd'),
                $probleem->fetchField('Tijd_Afgerond'));
        } else {
            return null;
        }
    }


    public static function readAll()
    {
        $list = array();
        $probleem = SQL::query("SELECT * FROM `probleem`");
        while ($probleem->isValid()) {
            $list[] = Probleem::create(
                $probleem->fetchField('Probleem_ID'),
                $probleem->fetchField('Probleem_Omschrijving'),
                $probleem->fetchField('Afgehandeld'),
                Medewerker::read($probleem->fetchField('Medewerker_ID')),
                $probleem->fetchField('Tijd'),
                $probleem->fetchField('Tijd_Afgerond'));
            $probleem->next();
        }
        return $list;

    }

    public static function create($id, $omschrijving, $afgehandeld, Medewerker $medewerker, $tijd, $tijdafgerond)
    {
        return new Probleem($id, $omschrijving, $afgehandeld, $medewerker, $tijd, $tijdafgerond);
    }

    public static function readAfgehandeld()
    {
        $list = array();
        $probleem = SQL::query("SELECT * FROM `probleem` WHERE `Afgehandeld` = 'nee'");
        while ($probleem->isValid()) {
            $list[] = Probleem::create(
                $probleem->fetchField('Probleem_ID'),
                $probleem->fetchField('Probleem_Omschrijving'),
                $probleem->fetchField('Afgehandeld'),
                Medewerker::read($probleem->fetchField('Medewerker_ID')),
                null,
                null);
            $probleem->next();
        }
        return $list;
    }

    public static function readMogelijkHardware()
    {
        $list = array();
        $hardwareID = SQL::query("SELECT Hardware_ID FROM `incident` GROUP BY `Hardware_ID`
                                HAVING count(`Hardware_ID`) >=2");
        while ($hardwareID->isValid()) {
            $incidenten = SQL::query("SELECT * FROM `incident` WHERE Hardware_ID = {$hardwareID->fetchField('Hardware_ID')}");
            while ($incidenten->isValid()) {
                $list[$hardwareID->fetchField('Hardware_ID')][] = Incident::read($incidenten->fetchField('Incident_ID'));
                $incidenten->next();

            }
            $hardwareID->next();
        }
        return $list;
    }

    public static function readMogelijkGebruiker()
    {
        $list = array();
        $gebruikerID = SQL::query("SELECT * FROM `incident` i, `gebruiker` g WHERE i.`Gebruiker_ID` = g.Gebruiker_ID
                            GROUP BY Hardware_ID
                            HAVING `Hardware_ID` >=2 AND COUNT(Incident_Omschrijving)>=2
                            ORDER BY Incident_Omschrijving");

        while ($gebruikerID->isValid()) {
            $incidenten = SQL::query("SELECT * FROM `incident` WHERE Gebruiker_ID = {$gebruikerID->fetchField('Gebruiker_ID')}");
            while ($incidenten->isValid()) {
                $list[$gebruikerID->fetchField('Hardware_ID')][] = Incident::read($incidenten->fetchField('Incident_ID'));
                $incidenten->next();

            }
            $gebruikerID->next();
        }
        return $list;
    }
    
    public function toArray()
    {
        return array(
            "ID" => $this->id,
            "Omschrijving" => $this->omschrijving,
            "Afgehandeld" => $this->afgehandeld,
            "Medewerker_ID" => $this->medewerker->getID(),
            "Medewerker_Naam" => $this->medewerker->getVoornaam(),
            "Tijd" => $this->tijd,
            "Tijdafgerond" => $this->tijdafgerond
        );
    }

    public function deleteHard($Iid, $Pid)
    {

        SQL::execute("DELETE FROM `probleem_node` WHERE `Incident_ID` = $Iid AND `Probleem_ID` = $Pid");
    }

    public function update()
    {
        if (!is_null($this->id)) {
            SQL::execute("UPDATE `probleem`
                SET `Probleem_Omschrijving` = '{$this->omschrijving}'
                WHERE `Probleem_ID` = {$this->id}");
        } else {
            SQL::execute("INSERT INTO `probleem` (
                            `Probleem_ID`, `Probleem_Omschrijving`, `Medewerker_ID`)
            VALUES (NULL,
                    '{$this->omschrijving}',
                    '{$this->medewerker->getID()}')");
        }
    }

    public function Afhandelen()
    {
        SQL::execute("UPDATE `probleem`
                              SET `Afgehandeld` = 'ja',
                                  `Tijd_Afgerond` = '" . date('Y-m-d H:i:s') . "'
                                  WHERE `Probleem_ID` = {$this->id}");


    }

    public static function returnID()
    {
       $id = SQL::query("SELECT * FROM `probleem` order by `Probleem_ID` desc")->fetchField('Probleem_ID');
        return $id;
    }
    public static function setProbleemOmschrijving($omschrijving)
    {
        $id = SQL::query("SELECT * FROM `probleem` order by `Probleem_ID` desc")->fetchField('Probleem_ID');
        SQL::execute("UPDATE `probleem`
                                SET `Probleem_Omschrijving` = '{$omschrijving}'
                                WHERE `Probleem_ID` = $id");
    }

    public function setAfgehandeld($afgehandeld)
    {
        $this->afgehandeld = $afgehandeld;
    }

    public function getAfgehandeld()
    {
        return $this->afgehandeld;
    }

    public function setGebruiker($gebruiker)
    {
        $this->gebruiker = $gebruiker;
    }

    public function getGebruiker()
    {
        return $this->gebruiker;
    }

    public function setHardware($hardware)
    {
        $this->hardware = $hardware;
    }

    public function getHardware()
    {
        return $this->hardware;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setMedewerker($medewerker)
    {
        $this->medewerker = $medewerker;
    }

    public function getMedewerker()
    {
        return $this->medewerker;
    }

    public function setOmschrijving($omschrijving)
    {
        $this->omschrijving = $omschrijving;
    }

    public function getOmschrijving()
    {
        return $this->omschrijving;
    }

    public function setSla($sla)
    {
        $this->sla = $sla;
    }

    public function getSla()
    {
        return $this->sla;
    }

    public function setTijd($tijd)
    {
        $this->tijd = $tijd;
    }

    public function getTijd()
    {
        return $this->tijd;
    }

    public function setTijdafgerond($tijdafgerond)
    {
        $this->tijdafgerond = $tijdafgerond;
    }

    public function getTijdafgerond()
    {
        return $this->tijdafgerond;
    }


}
